/*
 * @lc app=leetcode.cn id=101 lang=javascript
 *
 * [101] 对称二叉树
 */

// @lc code=start
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */

 /*
  解题思路
  1. 树是空的， true。

  2. 判断这棵树的左子树和右子树是否对称。

  3. 两棵子树的对称条件： 根节点相等， 左子树的左子树和右子树的右子树对称， 左子树的右子树和右子树的左子树对称：
 */
var isSymmetric = function(root) {
  return helper(root, root)
};
const helper = function (p, q) {
  if (p === null && q === null) {
    return true
  }
  if (p === null || q === null) {
    return false
  }
  return p.val === q.val && helper(p.left, q.right) && helper(q.right, p.left)
}
// @lc code=end

